/**
 *
 */

// 通过http模块访问百度的接口
const http = require('http');
// fs模块，用来保存语音文件
const fs = require('fs');
// path模块，处理路径
const path = require('path');

module.exports = { save }

function save(fileName = 'a.mp3', text = '', callback = (res) => { }) {
  console.log('fileName=' + fileName)
  const postData = {
    "lan": "zh",    // zh表示中文
    "ie": "UTF-8",  // 字符编码
    "spd": 2,       // 表示朗读的语速，9代表最快，1是最慢（撩妹请用2，绕口令请用9）
    "text": encodeURI(text)    // 这句话就是要转换为语音的，可以表白一下，XXX我爱你
  };
  const query = setQueryParams(postData)

  const options = {
    "method": "GET",
    "hostname": "tts.baidu.com",
    "path": "/text2audio?" + query
  };

  // 调用http模块的request方法请求百度接口
  const req = http.request(options, function (res) {
    const chunks = [];

    res.on("data", function (chunk) {
      chunks.push(chunk);   // 获取到的音频文件数据暂存到chunks里面
    });

    req.on("error", function (err) {
      callback && callback(false);
    });

    res.on("end", function () {
      // 这里用到了Buffer模块，大概意思就是把获取到的语音文件流存入到body里面，body是一个Buffer
      const body = Buffer.concat(chunks);
      // console.log('body', body)
      // 生成的mp3文件存储的路径，文件名叫做iloveu.mp3
      const filePath = path.normalize(__dirname + '/../assets/' + fileName);
      // fs模块写文件
      fs.writeFileSync(filePath, body);
      callback && callback(true);
    });

  });

  req.end();
}

function setQueryParams(object) {
  let index = 0;
  let query = ''
  for (let key in object) {
    if (index > 0) query += '&';
    let value = object[key] || '';
    query += key;
    query += '=';
    query += value;
    index += 1;
  }
  return query;
}